// ///////////////////////////// MIT License //////////////////////////////////// //
//                                                                                //
// Copyright (c) 2010 David Zsolt Manrique                                        //
//                    david.zsolt.manrique@gmail.com                              //
//                                                                                //
// Permission is hereby granted, free of charge, to any person obtaining a copy   //
// of this software and associated documentation files (the "Software"), to deal  //
// in the Software without restriction, including without limitation the rights   //
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell      //
// copies of the Software, and to permit persons to whom the Software is          //
// furnished to do so, subject to the following conditions:                       //
//                                                                                //
// The above copyright notice and this permission notice shall be included in     //
// all copies or substantial portions of the Software.                            //
//                                                                                //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR     //
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,       //
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE    //
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER         //
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,  //
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN      //
// THE SOFTWARE.                                                                  //
//                                                                                //
// ////////////////////////////////////////////////////////////////////////////// //

#ifndef TYPE_H
#define TYPE_H

#include "headers.h"

typedef Eigen::Matrix3d               matrix_type;       //! Geometry matrix type.
typedef Eigen::Vector3d               vector_type;       //! Geometry vector type. 
typedef Eigen::VectorXd               vectorx_type;      //! Linear Algebra vector type.
typedef std::vector<vector_type>      vector_array_type; //! Type of array of geometry vectors.
typedef double                        real_type;         //! Scalar type.
typedef vector_array_type::size_type  array_index_type;  //! Index that goes 0..+inf, for array of geometry vectors.
typedef int                           vector_index_type; //! Index that goes from -inf..+inf, for linear algebra vector.
typedef int                           atom_index;        //! Index for atoms, it goes from 1..n.
typedef double                        param_type;        //! Type for parameters.
typedef std::vector<real_type>        real_array_type;   //! Type of array of real

enum io_type					    { def,position,velocity,mass,charge,fixed };  //!  Input-output format types.
enum io_version						{ normal,debug,xyz };                   //!  Input-output format versions.

#endif // TYPE_H

